

import rme.RmeConfigurator;
import rme.naming.RmeNaming;

public class RmiClient {

    public static RmiClient cliente;
    ObjetoRemoto info;
    private RmiClient(String host)
    {
        try {
      //      System.out.println("Configurando...");
            RmeConfigurator conf = new RmeConfigurator();
            conf.configure();
      //      System.out.println("Procurando por objeto remoto...");
             
            info = (ObjetoRemoto)RmeNaming.lookup(host + "rmeTeste");
        }
        catch( Exception e )
        {
            System.out.println("Erro ao procurar o objeto remoto!\n" + e);
        }
    }

    public static RmiClient getInstance()
    {
       if(cliente == null)
           cliente = new RmiClient("");
       return cliente;
    }
    /* Método do cliente que chama a execução do método remoto */
    public String[] requestSongs(String userName, int rede) throws Exception {
  
        try {
            // Executando a chamada remota
            return info.requestSongs(userName,rede);
        }
        catch( Exception ex ) {
            throw new Exception("Erro ao realizar a chamada remota!\n" + ex);
        }
    }
    
     public boolean isValidAuthentication(String nome, String senha) throws Exception {
  
        try {
            // Executando a chamada remota
            return info.isValidAuthentication(nome, senha);
        }
        catch( Exception ex ) {
            throw new Exception("Erro ao realizar a chamada remota!\n" + ex);
        }
    }

       public int getCurrentNetworkId() throws Exception {

        try {
            // Executando a chamada remota
            return info.getCurrentNetworkId();
        }
        catch( Exception ex ) {
            throw new Exception("Erro ao realizar a chamada remota!\n" + ex);
        }
    }

   public int getNewNetworkId() throws Exception {

        try {
            // Executando a chamada remota
            return info.getNewNetworkId();

        }
        catch( Exception ex ) {
            throw new Exception("Erro ao realizar a chamada remota!\n" + ex);
        }
    }

    public boolean removeUserFromNetwork(String user, int networkId) throws Exception {

        try {
            // Executando a chamada remota
            return info.retiraDaRede(user, networkId);

        }
        catch( Exception ex ) {
            throw new Exception("Erro ao realizar a chamada remota!\n" + ex);
        }
    }
}